package com.time.workbench.efficient.handle;


import com.time.workbench.efficient.entity.dto.ServerSessionInfo;

/**
 * 部署抽象类
 * 子类不做spring依赖控制,由上级调用做
 * 定义部署步奏 (中间步奏不需要 可以不重写)
 * 1: 连接服务器
 * 2: 拉取代码
 * 3: 打包
 * 4: 停止旧版本应用
 * 5: 备份老的包
 * 6: 移动包到应用目录下
 * 7: 启动
 * 8: 监听应用状态
 * 9: 释放资源
 * 10: 失败/成功通知
 */

public interface DeployInterface {


    /**
     * 构建
     */
    boolean build();

    /**
     * 启动
     */
    void startUp();

    /**
     * 初始化数据
     */
    void init();

    /**
     * 连接服务器
     */
    void connectServer();

    /**
     * 连接服务器
     */
    void connectServer(ServerSessionInfo serverSession);

    /**
     * 拉取代码
     */
    void pullCode();

    /**
     * 打包
     */
    boolean packageCode();

    /**
     * 停止应用
     */
    void stop(ServerSessionInfo serverSessionInfo);

    /**
     * 备份老的包
     */
    void backupPackage(ServerSessionInfo serverSessionInfo);

    /**
     * 移动包到应用目录下
     */
    void movePackage(ServerSessionInfo serverSessionInfo);

    /**
     * 启动
     */
    void start(ServerSessionInfo serverSessionInfo);

    /**
     * 监听应用状态
     *
     * @return 是否启动成功
     */
    boolean monitorStatus(ServerSessionInfo serverSessionInfo);

    /**
     * 释放资源
     */
    void freed(ServerSessionInfo serverSessionInfo);

    /**
     * 通知
     */
    void notice();
}
